<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>

        //数据与对象的深拷贝 递归算法
        function deepCopy(obj) {
            if (Array.isArray(obj)) {
                const copy = [];
                obj.forEach(item => {
                copy.push(deepCopy(item));
                });
                return copy;
            } else if (typeof obj === 'object' && obj !== null) {
                const copy = {};
                Object.keys(obj).forEach(key => {
                copy[key] = deepCopy(obj[key]);
                });
                return copy;
            } else {
                return obj;
            }
        }

        //递归

        function factorial(n) {
            if (n <= 1) {
                return 1;
            } else {
                return n * factorial(n - 1);
            }
         }
         console.log(factorial(5)); // 输出: 120


         //数组 深拷贝常见的方法
         JSON.parse(JSON.stringify(array));

        //对象深拷贝 常用方法
         JSON.parse(JSON.stringify(obj));

        // lodash的cloneDeep

        // 示例使用：
        // const originalObj = {
        // a: 1,
        // b: { c: 2 },
        // d: [3, 4]
        // };
        // const deepCopyObj = deepCopy(originalObj);

        // console.log(deepCopyObj);
        // 输出：{ a: 1, b: { c: 2 }, d: [3, 4] }

        // deepCopyObj.b.c = 99;
        // console.log(originalObj.b.c);
        // // 输出：2
        // console.log(deepCopyObj.b.c);
        // 输出：99

        const originalArray = [5, 6, { e: 7 }];
        const deepCopyArray = deepCopy(originalArray);

        console.log(deepCopyArray);
        // 输出：[5, 6, { e: 7 }]

        // deepCopyArray[2].e = 88;
        // console.log(originalArray[2].e);
        // // 输出：7
        // console.log(deepCopyArray[2].e);
        // 输出：88

    </script>
</body>
</html>